<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 定义一个函数，求第二十位的斐波那契数是多少？

      //   var arr = [1, 1];
      //   function getNum(num) {
      //     for (var i = 0; i < num; i++) {
      //       if (i == 0 || i == 1) {
      //         continue;
      //       } else if (i >= 2) {
      //         arr[i] = arr[i - 1] + arr[i - 2];
      //       }
      //       // 打印出1-num各个位数的斐波那契数
      //       //   console.log(`第${i + 1}位的斐波那契数为:${arr[i]}`);
      //       while (i == num - 1) {
      //         alert(20`第${i + 1}位的斐波那契数为:${arr[i]}`);
      //         break;
      //       }
      //     }
      //   }
      //   var num = prompt('请输入一个你想要的斐波那契数的位数：');
      //   getNum(num);

      //   2、定义一个函数，给定一个年份、月份，判断该月多少天
      //   function getDays(year, month) {
      //     let day;
      //     if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
      //       alert(`${year}年${month}月,总共有31天`);
      //     } else {
      //       if (month != 2) {
      //         alert(`${year}年${month}月,总共有30天`);
      //       }
      //     }
      //     if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
      //       if (month == 2) {
      //         alert(`${year}年${month}月,总共有29天`);
      //       }
      //     } else {
      //       if (month == 2) {
      //         alert(`${year}年${month}月,总共有28天`);
      //       }
      //     }
      //   }
      //   var year = prompt(`请输入您想要查找的年份：`);
      //   var month = prompt(`请输入您想要查找的天数：`);
      //   getDays(year, month);

      //3、求100-999之间的水仙花数 最后放入一个数组中  水仙花数：是一个三位数，
      //   该三位数各位数字立方之和等于该数本身，例如153就是一个水仙花数
      //   var arr = [];
      //   for (var i = 100; i <= 999; i++) {
      //     var a = parseInt(i / 100);
      //     var b = parseInt((i / 10) % 10);
      //     var c = parseInt(i % 10);
      //     var sum = a * a * a + b * b * b + c * c * c;
      //     if (sum == i) {
      //       arr.push(sum);
      //     }
      //   }
      //   console.log(`100~999之间的水仙花数为` + arr);

      // 4、求现在距离2023.01.01还有多少天？
      //当前的时间戳
      //   var nowTime = new Date();
      //   nowTime = nowTime.getTime();
      //   console.log(nowTime);
      //   //2023.01.01的时间戳
      //   var afterTime = new Date('2023-01-01');
      //   var afterTime = afterTime.getTime();
      //   console.log(afterTime);
      //   days = Math.floor((afterTime - nowTime) / 1000 / 3600 / 24);
      //   console.log(days);

      // 5、数组a由1～20个数字组成，每个数字为4个，总共80个元素
      // 随机取出15个元素组成新的数组b，编写一个函数对b进行处理，如果b满足每个数字为3个
      // 如：[1,1,1,2,2,2,3,3,3,4,4,4,11,11,11]则返回1，否则返回0
      // let a = [
      //   1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10,
      //   10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,
      //   17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20,
      // ];

      // var newarr = [];
      // for (var i = 0; i < 15; i++) {
      //   var num = Math.floor(Math.random() * 80);
      //   newarr.push(a[num]);
      // }
      // console.log(newarr);
      // var obj = {};
      // for (var i = 0; i < newarr.length; i++) {
      //   obj[newarr[i]] = obj[newarr[i]] + 1 || 1;
      // }
      // console.log(obj);

      // console.log(Object.values(obj)[0]);

      // for (var i = 0; i < Object.values(obj).length; i++) {
      //   if (Object.values(obj)[i] != 3) {
      //     console.log(`0`);
      //     break;
      //   }
      //   if (i == Object.values(obj).length - 1) {
      //     console.log(`1`);
      //   }
      // }

      //  拓展：
      //  对随机数进行去重处理
      //  for (var i = 0; i < 15; i++) {
      // // 用来存储选区的下标
      // var flag = [];
      // for (var j = 0; j < 15; j++) {
      //   var num = Math.floor(Math.random() * 81);
      //   if (flag.indexOf(num) == -1) {
      //     flag.push(num);
      //   } else {
      //     // var num = Math.floor(Math.random() * 81);
      //     j--;
      //   }
      // }
      //   }
      //   console.log(flag);获取不同的下标的数组

      // 猜数字游戏,生成一个随机数1-10，进入页面定义一个函数让用户输入猜的数字，如果猜中了就返回猜中了，猜小了就提示猜小了，猜大了也进行提示，用户一共有五次机会；

      /*   功能分析:
        功能1:可以自定义输入您想要猜的数字的范围大小
        功能2:可以判断输入的数对于目标数的差距,如果猜对了,有正确的信息提示
        功能3:可以自定义输入您想要猜的数字的次数，但是不能大于范围大小 */

      alert('猜数字游戏');
      alert('请输入您想要猜的数字的范围');
      var number1 = Number(prompt('请输入第一个数字范围：'));
      var number2 = Number(prompt('请输入第二个数字范围：'));
      function getRandomIntInclusive(min, max) {
        min = Math.ceil(min);
        max = Math.floor(max);
        return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值，含最小值
      }
      var number = getRandomIntInclusive(number1 < number2 ? number1 : number2, number1 > number2 ? number1 : number2);
      var choice = Number(prompt(`猜数次数：`));
      while (choice > (number1 > number2 ? number1 : number2)) {
        choice = prompt(`重新输入猜数次数：`); //限制猜的次数不能大于范围最大值
      }
      // var myNum = prompt(`请输入您猜的数值`);                      //当你要进行次数的控制的时候就不能够在外面输入了
      /*   while (myNum != number) {
            //这里的while语句不能实现正确结果提示信息的功能，如果改成do...while的话也只能当第一次输入正确结果的时候才能够输出正确的结果，
            // 所以要进行代码优化，改成while(True);这一种死循环的格式
            if (myNum > number) {
                alert("大了,请重新猜！");
            }
            else if (myNum < number) {            //if语句可以换成while语句
                alert("小了,请重新猜!")
            }
            else {
                alert("恭喜您,猜对了");
            }
            myNum = prompt(`请重新输入您猜的数值`);
        } */

      // 优化后的结果为：
      //   while (true) {
      for (var i = 1; i <= choice; i++) {
        //换成for语句可以进行输入次数的判断
        myNum = prompt(`请输入您猜的数值`);
        if (
          (myNum > number && myNum < (number1 > number2 ? number1 : number2)) ||
          myNum == (number1 > number2 ? number1 : number2)
        ) {
          //在这里换成while也是没有问题的
          alert('大了,请重新猜！');
        } else if (myNum > (number1 > number2 ? number1 : number2)) {
          alert('西米马赛,你超出范围了');
        } else if (
          (myNum < number && myNum > (number1 < number2 ? number1 : number2)) ||
          myNum == (number1 < number2 ? number1 : number2)
        ) {
          alert('小了,请重新猜!');
        } else if (myNum < (number1 < number2 ? number1 : number2)) {
          alert('库尼纳塞,你低于范围了');
        } else {
          alert('恭喜您,猜对了');
          break;
        }
      }
      if (choice < i) {
        alert('很抱歉,挑战失败。');
      }
      //   }
      //可以添加猜数字的次数，不能大于猜数范围
    </script>
  </body>
</html>
